package main.java.proxy.jdk_proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 获取代理对象的工程类
 */
public class ProxyFactory {

    private TrainStation trainStation = new TrainStation();
    public SellTickets getProxyObject(){
        SellTickets proxyObject =(SellTickets) Proxy.newProxyInstance(
                trainStation.getClass().getClassLoader(),
                trainStation.getClass().getInterfaces(),
                new InvocationHandler() {
                    /**
                     *
                     * @param proxy = proxyObject
                     * @param method = 调用的方法
                     * @param args = 调用方法传入的参数
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//                        System.out.println("执行了Invoc方法");
                        System.out.println("jdk动态代理，代理收了服务费");
                        /**
                         * 参数一 方法调用的对象
                         * 参数二 调用方法时传入的参数
                         */
                        Object invoke = method.invoke(trainStation, args);
                        return invoke;
                    }
                }
        );
        return proxyObject;
    }
}
